bitkeeper revision 1.1108.32.1 (4107e4e2YMdWDsDVr_ptn6faQ7KwmA)
authortw275@labyrinth.cl.cam.ac.uk <tw275@labyrinth.cl.cam.ac.uk>
Wed, 28 Jul 2004 17:39:46 +0000 (17:39 +0000)
committertw275@labyrinth.cl.cam.ac.uk <tw275@labyrinth.cl.cam.ac.uk>
Wed, 28 Jul 2004 17:39:46 +0000 (17:39 +0000)
Virtually finished Domain Creation from sv.
Needs work to make it more robust.

tools/python/xen/sv/CreateDomain.py

index 62123871bd032ab3e1be8c1ea0494fc115f11906..a3b541d3fb99fcc943d02b56a4d09bb9abdec911 100644 (file)
@@ -1,5 +1,10 @@
 from xen.sv.Wizard import *
 from xen.sv.util import *
+from xen.sv.GenTabbed import PreTab
+
+from xen.xm.create import make_config
+
+from xen.xend.XendClient import server
 
 class CreateDomain( Wizard ):
     def __init__( self, urlWriter ):
@@ -17,15 +22,17 @@ class CreatePage0( Sheet ):
 
     def __init__( self, urlWriter ):
         Sheet.__init__( self, urlWriter, "General", 0 )
-        self.addControl( InputControl( 'vm_name', 'VM Name', 'VM Name:' ) )
+        self.addControl( InputControl( 'name', 'VM Name', 'VM Name:' ) )
         self.addControl( InputControl( 'memory', '64', 'Memory (Mb):' ) )
+        self.addControl( InputControl( 'cpu', '0', 'CPU:' ) )
                         
 class CreatePage1( Sheet ):
 
     def __init__( self, urlWriter ):
         Sheet.__init__( self, urlWriter, "Setup Kernel Image", 1 )
-        self.addControl( InputControl( 'kernel_image', '/boot/vmlinuz-2.4.26-xenU', 'Kernel Image:' ) )
-        self.addControl( InputControl( 'kernel_params', '', 'Kernel Command Line Parame:' ) )
+        self.addControl( InputControl( 'builder', 'linux', 'Kernel Type:' ) )
+        self.addControl( InputControl( 'kernel', '/boot/vmlinuz-2.4.26-xenU', 'Kernel Image:' ) )
+        self.addControl( InputControl( 'extra', '', 'Kernel Command Line Parame:' ) )
 
 class CreatePage2( Sheet ):
 
@@ -45,8 +52,9 @@ class CreatePage3( Sheet ):
         for i in range( int( num_vbds ) ):
             self.addControl( InputControl( 'vbd%s_dom0' % i, '/dev/sda%i' % i, 'Device %s name:' % i  ) )
             self.addControl( InputControl( 'vbd%s_domU' % i, '/dev/sda%i' % i, 'Virtualized device %s:' % i ) )
+            self.addControl( InputControl( 'vbd%s_mode' % i, 'w', 'Device %s mode:' % i ) )
             
-        self.addControl( InputControl( 'root_dev', '/dev/sda1', 'Root device (in VM):' ) )
+        self.addControl( InputControl( 'root', '/dev/sda1', 'Root device (in VM):' ) )
         
         Sheet.write_BODY( self, request )
                 
@@ -65,6 +73,58 @@ class CreateFinish( Sheet ):
         Sheet.__init__( self, urlWriter, "All Done", 5 )
         
     def write_BODY( self, request ):
-       request.write( "<pre>%s</pre>" % sxp2prettystring( string2sxp( self.passback ) ) )
+       fin_sxp = string2sxp( self.passback )
+    
+        xend_sxp = self.translate_sxp( fin_sxp )
+        
+        pt = PreTab( sxp2prettystring( xend_sxp ) )
+        pt.write_BODY( request )
+        
+        server.xend_domain_create( xend_sxp )
+       
         request.write( "<input type='hidden' name='passback' value=\"%s\"></p>" % self.passback )
         request.write( "<input type='hidden' name='sheet' value='%s'></p>" % self.location )
+    
+    def translate_sxp( self, fin_sxp ):
+       fin_hash = ssxp2hash( fin_sxp )
+    
+       vals = OptVals()
+        
+        setattr(vals, "name",  fin_hash.get( 'name' ) )
+        setattr(vals, "memory", fin_hash.get( 'memory' ) )
+        setattr(vals, "cpu",   fin_hash.get( 'cpu' ) )
+        
+        setattr(vals, "builder",       fin_hash.get( 'builder' ) )        
+        setattr(vals, "kernel",        fin_hash.get( 'kernel' ) )
+       setattr(vals, "root",           fin_hash.get( 'root' ) )
+        setattr(vals, "extra",                 fin_hash.get( 'extra' ) ) 
+        
+        vbds = []
+        
+        for i in range( int( fin_hash.get( 'num_vbds' ) ) ):
+            vbds.append( ( fin_hash.get('vbd%s_domU' % i ), fin_hash.get( 'vbd%s_dom0' % i ), fin_hash.get( 'vbd%s_mode' % i ) ) )
+        
+        vals.disk = vbds    
+            
+        vals.pci = []
+        
+        vals.vif = []
+        vals.nics = 1
+        
+        vals.blkif = None
+        vals.netif = None
+        vals.restart = None
+        vals.console = None
+        vals.ramdisk = None
+        
+        #todo: setup ip addr stuff
+        
+        vals.cmdline_ip = None
+        
+        return make_config( vals )
+
+        
+class OptVals:
+    """Class to hold option values.
+    """
+    pass
\ No newline at end of file